home *** CD-ROM | disk | FTP | other *** search
- { Profiler-Testversion zu G:\PROFILER.SYS\DEMOS.PAS\MENDEL.PAS }
-
- CONST ___ = 46;
- ___2 =6;
- VAR __ : INTEGER ;
- VAR _ : ARRAY [1..___] OF REAL ;
- VAR _2 : ARRAY [1..___2] OF REAL ;
- VAR _h : STRING;
- VAR _f : TEXT;
- { 7. Bundeswettbewerb Informatik 1988/1989 }
- { 1. Runde, Aufgabe 5 ; Autor M. Berger }
- CONST MAX_ANZAHL_MERKMALE=4;
- TYPE ELTERNTEIL_DEF=(MUTTER,VATER,KIND);
- TYPNAME_DEF=(MUSTER,FARBE,FUEHLERFORM);
- MERKMALSPEICHER=STRING[20];
- DOMINANZ_LISTE_TEIL=RECORD
- MERKMAL:MERKMALSPEICHER;
- ANZ_REZES:INTEGER;
- REZESSIVE:ARRAY[1..MAX_ANZAHL_MERKMALE]
- OF MERKMALSPEICHER;
- END;
- DOMINANZ_LISTE_TYP=
- ARRAY[TYPNAME_DEF,1..MAX_ANZAHL_MERKMALE]
- OF DOMINANZ_LISTE_TEIL;
- VAR DOMINANZ_LISTE:DOMINANZ_LISTE_TYP;
- MERKMALE:ARRAY[ELTERNTEIL_DEF,TYPNAME_DEF,1..2]
- OF MERKMALSPEICHER;
- ANZ_KINDER:INTEGER;
- ELTERNTEIL:ELTERNTEIL_DEF;
- TYP:TYPNAME_DEF;
- ZAEHLER:INTEGER;
- PROCEDURE INITIALISIERUNG;
- VAR I:INTEGER;
- BEGIN _[1] := _[1] + 1 ; _2[1] := _2[1] + 1 ;
- FOR TYP:=MUSTER TO FUEHLERFORM DO BEGIN _[3] := _[3] + 1 ;
- FOR I:=1 TO MAX_ANZAHL_MERKMALE DO BEGIN _[4] := _[4] + 1 ;
- DOMINANZ_LISTE[TYP,I].MERKMAL:='' END END ;
- DOMINANZ_LISTE[MUSTER,1].MERKMAL:='uni' ;
- DOMINANZ_LISTE[MUSTER,1].ANZ_REZES:=3 ;
- DOMINANZ_LISTE[MUSTER,1].REZESSIVE[1]:='uni' ;
- DOMINANZ_LISTE[MUSTER,1].REZESSIVE[2]:='schwarz gepunktet' ;
- DOMINANZ_LISTE[MUSTER,1].REZESSIVE[3]:='schwarz gestreift' ;
- DOMINANZ_LISTE[MUSTER,2].MERKMAL:='schwarz gepunktet' ;
- DOMINANZ_LISTE[MUSTER,2].ANZ_REZES:=2 ;
- DOMINANZ_LISTE[MUSTER,2].REZESSIVE[1]:='schwarz gepunktet' ;
- DOMINANZ_LISTE[MUSTER,2].REZESSIVE[2]:='schwarz gestreift' ;
- DOMINANZ_LISTE[MUSTER,3].MERKMAL:='schwarz gestreift' ;
- DOMINANZ_LISTE[MUSTER,3].ANZ_REZES:=1 ;
- DOMINANZ_LISTE[MUSTER,3].REZESSIVE[1]:='schwarz gestreift' ;
- DOMINANZ_LISTE[FARBE,1].MERKMAL:='rot' ;
- DOMINANZ_LISTE[FARBE,1].ANZ_REZES:=3 ;
- DOMINANZ_LISTE[FARBE,1].REZESSIVE[1]:='rot' ;
- DOMINANZ_LISTE[FARBE,1].REZESSIVE[2]:='grün' ;
- DOMINANZ_LISTE[FARBE,1].REZESSIVE[3]:='blau' ;
- DOMINANZ_LISTE[FARBE,2].MERKMAL:='gelb' ;
- DOMINANZ_LISTE[FARBE,2].ANZ_REZES:=3 ;
- DOMINANZ_LISTE[FARBE,2].REZESSIVE[1]:='gelb' ;
- DOMINANZ_LISTE[FARBE,2].REZESSIVE[2]:='rot' ;
- DOMINANZ_LISTE[FARBE,2].REZESSIVE[3]:='blau' ;
- DOMINANZ_LISTE[FARBE,3].MERKMAL:='grün' ;
- DOMINANZ_LISTE[FARBE,3].ANZ_REZES:=3 ;
- DOMINANZ_LISTE[FARBE,3].REZESSIVE[1]:='grün' ;
- DOMINANZ_LISTE[FARBE,3].REZESSIVE[2]:='gelb' ;
- DOMINANZ_LISTE[FARBE,3].REZESSIVE[3]:='blau' ;
- DOMINANZ_LISTE[FARBE,4].MERKMAL:='blau' ;
- DOMINANZ_LISTE[FARBE,4].ANZ_REZES:=1 ;
- DOMINANZ_LISTE[FARBE,4].REZESSIVE[1]:='blau' ;
- DOMINANZ_LISTE[FUEHLERFORM,1].MERKMAL:='gerade' ;
- DOMINANZ_LISTE[FUEHLERFORM,1].ANZ_REZES:=2 ;
- DOMINANZ_LISTE[FUEHLERFORM,1].REZESSIVE[1]:='gerade' ;
- DOMINANZ_LISTE[FUEHLERFORM,1].REZESSIVE[2]:='gekrümmt' ;
- DOMINANZ_LISTE[FUEHLERFORM,2].MERKMAL:='gekrümmt' ;
- DOMINANZ_LISTE[FUEHLERFORM,2].ANZ_REZES:=1 ;
- DOMINANZ_LISTE[FUEHLERFORM,2].REZESSIVE[1]:='gekrümmt' ;
- ;IF _2[1] > _[2] THEN _[2] := _2[1]; _2[1]:=_2[1]-1; END ;
- PROCEDURE EINGABE;
- BEGIN _[5] := _[5] + 1 ; _2[2] := _2[2] + 1 ;
- CLRSCR ; WRITELN('Mendels Land (bwINF 7 [88/89];Aufgabe 5)') ; WRITELN ;
- FOR ELTERNTEIL:=MUTTER TO VATER DO BEGIN _[7] := _[7] + 1 ;
- WRITE(' Bitte Merkmale ') ;
- IF ELTERNTEIL=MUTTER
- THEN BEGIN _[8] := _[8] + 1 ;
- WRITE('der Mutter ')
- END ELSE BEGIN _[9] := _[9] + 1 ;
- WRITE('des Vaters ') END ;
- WRITELN('angeben') ;
- FOR TYP:=MUSTER TO FUEHLERFORM DO BEGIN _[10] := _[10] + 1 ;
- WRITE(' Bitte ') ;
- BEGIN _[11] := _[11] + 1 ; CASE TYP OF
- MUSTER: BEGIN _[12] := _[12] + 1 ; WRITE('Muster ') END ;
- FARBE: BEGIN _[13] := _[13] + 1 ; WRITE('Flügelfarbe ') END ;
- FUEHLERFORM: BEGIN _[14] := _[14] + 1 ; WRITE('Fühlerform ') END ;
- END END ;
- WRITE('eingeben : ') ;
- READLN(MERKMALE[ELTERNTEIL,TYP,1]) ;
- END ;
- END ;
- WRITE('Anzahl der Kinder eingeben : ') ; READLN(ANZ_KINDER) ;
- ;IF _2[2] > _[6] THEN _[6] := _2[2]; _2[2]:=_2[2]-1; END ;
- PROCEDURE ERMITTLE_REZESSIVE_MERKMALE;
- VAR I:INTEGER;
- BEGIN _[15] := _[15] + 1 ; _2[3] := _2[3] + 1 ;
- FOR ELTERNTEIL:=MUTTER TO VATER DO BEGIN _[17] := _[17] + 1 ;
- FOR TYP:=MUSTER TO FUEHLERFORM DO BEGIN _[18] := _[18] + 1 ;
- MERKMALE[ELTERNTEIL,TYP,2]:='' ;
- I:=0 ;
- REPEAT _[19] := _[19] + 1 ;
- I:=I+1 ;
- IF DOMINANZ_LISTE[TYP,I].MERKMAL=MERKMALE[ELTERNTEIL,TYP,1]
- THEN BEGIN _[20] := _[20] + 1 ;
- MERKMALE[ELTERNTEIL,TYP,2]:=DOMINANZ_LISTE[TYP,I].REZESSIVE
- [RANDOM(DOMINANZ_LISTE[TYP,I].ANZ_REZES)+1] END ;
- UNTIL MERKMALE[ELTERNTEIL,TYP,2]<>'' ;
- END ;
- END ;
- ;IF _2[3] > _[16] THEN _[16] := _2[3]; _2[3]:=_2[3]-1; END ;
- PROCEDURE ERBMERKMAL_ERMITTELN;
- VAR I:INTEGER;
- BEGIN _[21] := _[21] + 1 ; _2[4] := _2[4] + 1 ;
- FOR ELTERNTEIL:=MUTTER TO VATER DO BEGIN _[23] := _[23] + 1 ;
- FOR TYP:=MUSTER TO FUEHLERFORM DO BEGIN _[24] := _[24] + 1 ;
- I:=ROUND(INT(RANDOM*2))+1 ;
- IF ELTERNTEIL=MUTTER THEN BEGIN _[25] := _[25] + 1 ;
- MERKMALE[KIND,TYP,1]:=MERKMALE[ELTERNTEIL,TYP,I] END ;
- IF ELTERNTEIL=VATER THEN BEGIN _[26] := _[26] + 1 ;
- MERKMALE[KIND,TYP,2]:=MERKMALE[ELTERNTEIL,TYP,I] END ;
- END ;
- END ;
- ;IF _2[4] > _[22] THEN _[22] := _2[4]; _2[4]:=_2[4]-1; END ;
- PROCEDURE DOM_ERBMERKMAL_ERMITTELN;
- VAR I,U:INTEGER;
- SWAP_HLP:MERKMALSPEICHER;
- BEENDEN:BOOLEAN;
- BEGIN _[27] := _[27] + 1 ; _2[5] := _2[5] + 1 ;
- FOR TYP:=MUSTER TO FUEHLERFORM DO BEGIN _[29] := _[29] + 1 ;
- I:=0 ;
- BEENDEN:=FALSE ;
- REPEAT _[30] := _[30] + 1 ;
- I:=I+1 ;
- IF MERKMALE[KIND,TYP,2]=
- DOMINANZ_LISTE[TYP,I].MERKMAL
- THEN BEGIN _[31] := _[31] + 1 ;
- FOR U:=1 TO DOMINANZ_LISTE[TYP,I].ANZ_REZES DO BEGIN _[32] := _[32] + 1 ;
- IF DOMINANZ_LISTE[TYP,I].REZESSIVE[U]
- =MERKMALE[KIND,TYP,1]
- THEN BEGIN _[33] := _[33] + 1 ;
- SWAP_HLP:=MERKMALE[KIND,TYP,2] ;
- MERKMALE[KIND,TYP,2]:=MERKMALE[KIND,TYP,1] ;
- MERKMALE[KIND,TYP,1]:=SWAP_HLP ;
- BEENDEN:=TRUE ;
- END ;
- END ;
- END ;
- UNTIL(BEENDEN)OR(I=MAX_ANZAHL_MERKMALE) ;
- END ;
- ;IF _2[5] > _[28] THEN _[28] := _2[5]; _2[5]:=_2[5]-1; END ;
- PROCEDURE AUSGABE;
- VAR X:CHAR;
- BEGIN _[34] := _[34] + 1 ; _2[6] := _2[6] + 1 ;
- CLRSCR ;
- WRITELN('Mendels Land (bwINF 7 [88/89];Aufgabe 5)') ; WRITELN ;
- FOR ELTERNTEIL:=MUTTER TO KIND DO BEGIN _[36] := _[36] + 1 ;
- WRITE(' Merkmale') ;
- IF ELTERNTEIL=MUTTER
- THEN BEGIN _[37] := _[37] + 1 ;
- WRITELN(' der Mutter :')
- END ELSE BEGIN _[38] := _[38] + 1 ;
- IF ELTERNTEIL=VATER
- THEN BEGIN _[39] := _[39] + 1 ;
- WRITELN(' des Vaters :')
- END ELSE BEGIN _[40] := _[40] + 1 ;
- WRITELN(' des ',ZAEHLER,'. Kindes :') END END ;
- FOR TYP:=MUSTER TO FUEHLERFORM DO BEGIN _[41] := _[41] + 1 ;
- WRITE(' - ') ;
- BEGIN _[42] := _[42] + 1 ; CASE TYP OF
- MUSTER: BEGIN _[43] := _[43] + 1 ; WRITE('Muster :') END ;
- FARBE: BEGIN _[44] := _[44] + 1 ; WRITE('Farbe :') END ;
- FUEHLERFORM: BEGIN _[45] := _[45] + 1 ; WRITE('Fühler :') END ;
- END END ;
- WRITELN(' Dominant ',MERKMALE[ELTERNTEIL,TYP,1],
- ' ; Rezessiv ',MERKMALE[ELTERNTEIL,TYP,2]) ;
- END ;
- END ;
- READ(KBD,X) ;
- ;IF _2[6] > _[35] THEN _[35] := _2[6]; _2[6]:=_2[6]-1; END ;
- BEGIN FOR __:= 1 TO ___ DO _[__]:=0; FOR __:= 1 TO ___2 DO _2[__]:=-1;
- INITIALISIERUNG ;
- EINGABE ;
- ERMITTLE_REZESSIVE_MERKMALE ;
- FOR ZAEHLER:=1 TO ANZ_KINDER DO BEGIN _[46] := _[46] + 1 ;
- ERBMERKMAL_ERMITTELN ;
- DOM_ERBMERKMAL_ERMITTELN ;
- AUSGABE ;
- END ;
- ;ASSIGN(_f,'G:\PROFILER.SYS\TESTFILE.TST\MENDEL.WRT');
- REWRITE(_f);
- WRITELN(_f,'(c)1989mkbmeersaukleintier');
- WRITELN(_f,'G:\PROFILER.SYS\DEMOS.PAS\MENDEL.PAS');
- WRITELN(_f,'nein');
- WRITELN(_f,'46.0');
- FOR __ := 1 TO ___ DO BEGIN
- STR(_[__],_h);
- WRITELN(_f,_h); END;
- CLOSE(_f);
- WRITELN;WRITELN;
- WRITELN('-> Profile-Testlauf beendet. Werte in G:\PROFILER.SYS\TESTFILE.TST\MENDEL.WRT');
- WRITELN('-> Bitte profile_2.prg starten. ');
- END.
-